iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 12
0
Modern Web

30天入門JavaScript系列 第 12

【Day 12】undeclared、let、const

  • 分享至 

  • xImage
  •  

這篇原本的ES6部分寫太爛,被我砍了(

undefined 跟 undeclared(未宣告)

首先知道甚麼是宣告跟賦值

var a=2;
//這句程式其實可以分成兩個部分
//分別是

var a;//宣告
a=2;//賦值

如果宣告了一個變數但沒有賦值,讀取這個值會得到undefined,
這個變數在記憶體中是從在的,但是還沒有值。
但如果對一個未宣告過的變數,就是undeclared,
JS在記憶體中找不到這個變數,會跳出錯誤

var跟let的差異

let是ES6新增的變數宣告方式,會有新的變數宣告方式,
代表var一定哪邊有缺陷,來看看下面

var a = 1;
var a = 5;
console.log(a); //5

let b = 1;
let b = 5;//會出現錯誤 

var在宣告已經宣告過的變數時,JS就會無視宣告,直接把值賦給原本變數,
但用let宣告相同變數會跳出錯誤,
當你不小心宣告名稱相同的變數時,用let會用錯誤提醒你,
用var不會跳錯,但會導致錯誤的輸出結果(還很難debug

接下來是下面這個程式

for (var i = 0; i < 10; i++) {}
console.log(i); //10

for (let j = 0; j < 10; j++) {}
console.log(j); //錯誤 j未定義

var的作用範圍是函式,let的作用範圍是區塊(就是{}),
如果像上面在if或for迴圈使用var宣告一個i,
會建立一個全域變數i,如果原本全域範圍就有i變數時則會改變i的值。

有人說既然let都出了,就不要用再var了,
但基本上第一種錯誤正常情況下是可以避免的,
在for迴圈一定要用let,其他情況下用let或var就看個人喜好。

const 常數

也是ES6新增的功能,可以用來宣告一個常數(不會改變的值)

const pi = 3.14;
pi = 3.15;//錯誤 不能重新賦值

const c ;//宣告時未賦值 也會跳錯

const array = [1, 2, 3]; 
array.push(4);//沒有把常數給重複值 單純改變陣列(或物件)內容是可以的

console.log(array); //[1,2,3,4]

上一篇
【Day 11】物件(一):物件簡介
下一篇
【Day 13】函式(三):JavaScript的函式特性
系列文
30天入門JavaScript30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言